尝试urlopen
维基百科的某个页面时,我有一个奇怪的错误.这是页面:
http://en.wikipedia.org/wiki/OpenCola_(drink)
这是shell会话:
>>> f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)') Traceback (most recent call last): File "C:\Program Files\Wing IDE 4.0\src\debug\tserver\_sandbox.py", line 1, in# Used internally for debug sandbox under external interpreter File "c:\Python26\Lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "c:\Python26\Lib\urllib2.py", line 397, in open response = meth(req, response) File "c:\Python26\Lib\urllib2.py", line 510, in http_response 'http', request, response, code, msg, hdrs) File "c:\Python26\Lib\urllib2.py", line 435, in error return self._call_chain(*args) File "c:\Python26\Lib\urllib2.py", line 369, in _call_chain result = func(*args) File "c:\Python26\Lib\urllib2.py", line 518, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 403: Forbidden
这发生在我不同大陆的两个不同系统上.有谁知道为什么会这样?
维基百科的立场是:
数据检索:对于与批准的机器人任务没有直接关系的任何用途,Bots不得用于检索批量内容.这包括从其他网站动态加载页面,这可能导致网站被列入黑名单并被永久拒绝访问.如果您想下载批量内容或镜像项目,请下载或托管您自己的数据库副本.
这就是Python被阻止的原因.你应该下载数据转储.
无论如何,你可以在Python 2中阅读这样的页面:
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) con = urllib2.urlopen( req ) print con.read()
或者在Python 3中:
import urllib req = urllib.request.Request(url, headers={'User-Agent' : "Magic Browser"}) con = urllib.request.urlopen( req ) print con.read()
要调试它,您需要捕获该异常.
try: f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)') except urllib2.HTTPError, e: print e.fp.read()
当我打印生成的消息时,它包括以下内容
"英语
我们的服务器目前遇到技术问题.这可能是暂时的,应尽快解决.请在几分钟后再试一次."
网站通常会通过检查是否由公认的用户代理访问来过滤访问.维基百科只是将您的脚本视为机器人并拒绝它.尝试欺骗浏览器.以下链接将为您提供一篇文章,向您展示如何.
http://wolfprojects.altervista.org/changeua.php